<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<script>

  /*
  * 值类型（基本类型）
  * string number boolean
  * null undefined
  *
  * 引用类型（复杂类型）
  * function object array
  * */

  /*
  * 谁调用方法谁就是this
  * call apply 改变this
  *
  * bind 绑定this
  * 箭头函数在哪定义this就是谁
  * */

  // let x = 1
  // x = 10

  /*(function f() {
    console.log(123)
  })()*/

  // f()

  /*
  (function () {
    for (var i = 0; i < 10; i++) {

    }
  })()

  console.log(i)
  */

  // 看书

  /*for (var i = 0; i < 10; i++) {

  }

  console.log(i)*/





  function fn() {
    let max = 10
    function f() {
      max++
      return max
    }
    return f
  }

  let bar = fn()
  // console.log(bar())
  // bar = null

  // let bar1 = fn()
  // console.log(bar1())
  // bar1 = null
  // console.log(bar())
  // console.log(bar())
  // console.log(bar())

  
  


  /*
  function f() {
    let x = 10
    // console.log(x)
    function f1() {
      // x
    }
  }
  f()
  console.log(x)
  */
  // btn.onclick = f

  // [f(), f()]

















  let obj = {
    a: 10,
    b: function () {
      // console.log(this)
      /*function f() {
        console.log(this)
      }*/
      let f = () => {
        console.log(this)
      }
      f()
    }
  }

  // obj.b()
  // react
  // let f1 = obj.b.bind(obj)
  // f1()


  // let obj = {
  //   a: 10,
  //   b: function () {
  //     console.log(this)
  //   }
  // }
  // obj.b() // obj
  // let myF = obj.b
  // myF.apply(obj)
  // myF.call(obj)
  // window.myF() // window

  // window.setInterval()

  // 类编程 面向对象
  // function Person(name) {
  //   this.name = name
  //   this.age = 18
  // }

  // null
  // 原型
  // console.log(Person.prototype.constructor)
  // Person.prototype.color = 'yellow'
  // Person.prototype.sayHi = function () {
  //   alert('hello prototype!')
  // }
  // console.log(Person.prototype)
  // console.log(Person instanceof Object)
  // console.log({} instanceof Object)
  // console.log([] instanceof Object)
  // {}
  // []
  // console.log(Person)
  // let p1 = new Person('李四') // 实例
  // p1.color = 'red'
  // console.log(p1)

  // 语法糖
  // function f() {
  //   console.log(p1)
  // }


  // console.log(p1.color)
  // console.log(p1.hasOwnProperty('color'))

  // console.log(p1 instanceof Person)
  // console.log(p1 instanceof Object)

  // 隐式原型
  // console.log(p1.__proto__)
  // console.log(Person.prototype === p1.__proto__)
  // console.log(Object.prototype.constructor)
  // console.log(Object.prototype)






</script>
</body>
</html>